package cn.iocoder.yudao.module.statistics.service.shareprofit;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.statistics.controller.admin.shareprofit.vo.*;
import cn.iocoder.yudao.module.statistics.controller.app.shareprofit.vo.AppStoreTradeShareProfitPageReqVO;
import cn.iocoder.yudao.module.statistics.dal.dataobject.shareprofit.StoreTradeShareProfitDO;

import javax.validation.Valid;
import java.util.Map;

/**
 * 门店交易合伙人分润 Service 接口
 *
 * @author 万民匠心
 */
public interface StoreTradeShareProfitService {

    /**
     * 创建门店交易合伙人分润
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStoreTradeShareProfit(@Valid StoreTradeShareProfitSaveReqVO createReqVO);

    /**
     * 更新门店交易合伙人分润
     *
     * @param updateReqVO 更新信息
     */
    void updateStoreTradeShareProfit(@Valid StoreTradeShareProfitSaveReqVO updateReqVO);

    /**
     * 删除门店交易合伙人分润
     *
     * @param id 编号
     */
    void deleteStoreTradeShareProfit(Long id);

    /**
     * 获得门店交易合伙人分润
     *
     * @param id 编号
     * @return 门店交易合伙人分润
     */
    StoreTradeShareProfitDO getStoreTradeShareProfit(Long id);

    /**
     * 获得门店交易合伙人分润分页
     *
     * @param pageReqVO 分页查询
     * @return 门店交易合伙人分润分页
     */
    PageResult<StoreTradeShareProfitDO> getStoreTradeShareProfitPage(StoreTradeShareProfitPageReqVO pageReqVO);


    /**
     * 计算分润
     *
     * @return 统计结果
     */
    String shareProfit(Integer days);


    /**
     * 合伙人分润查询
     *
     * @return 分润结果
     */
    Map<String, Long> queryShareProfit(Long userId);

    /**
     * 合伙人分润明细
     * @param pageReqVO
     * @return
     */
    PageResult<StoreTradeShareProfitDO> queryDetailList(AppStoreTradeShareProfitPageReqVO pageReqVO);

    /**
     * 合伙人分润汇总-按店铺
     * @param reqVO
     * @return
     */
    PageResult<StoreShareProfitVO> getByStorePage(StoreShareProfitPageReqVO reqVO);

    /**
     * 合伙人分润汇总-按合伙人
     * @param reqVO
     * @return
     */
    PageResult<PartnerShareProfitVO> getByPartnerPage(StoreShareProfitPageReqVO reqVO);
}